package alvarodelrosal.chat.client.gui;

import alvarodelrosal.chat.client.chataction.remote.ChatLogin;
import alvarodelrosal.chat.client.chataction.remote.ChatNewUser;
import java.awt.Dimension;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.*;

public class VentanaDeRegistro extends Ventana {

    private static JFrame ventanaDeRegistro;
    private static JTextField campoUsuario;
    private static JTextField campoClave;
    private JTextField campoConfirmarClave;
    private JTextField campoNombre;
    private JTextField campoMail;

    public VentanaDeRegistro() {
        ventanaDeRegistro = null;
    }

    public void crear() {
        if (laVentanaNoExiste()) {
            ventanaDeRegistro = new JFrame();

            parametrosDeVentana();

            JLabel etiquetaUsuario = crearEtiqueta("Nombre de usuario:", 0);
            ventanaDeRegistro.add(etiquetaUsuario);
            campoUsuario = crearCampo(0);
            ventanaDeRegistro.add(campoUsuario);

            JLabel etiquetaClave = crearEtiqueta("Contraseña:", 1);
            ventanaDeRegistro.add(etiquetaClave);
            campoClave = crearCampoClave(1);
            ventanaDeRegistro.add(campoClave);

            JLabel etiquetaConfirmarClave = crearEtiqueta("Confirmar contraseña:", 2);
            ventanaDeRegistro.add(etiquetaConfirmarClave);
            campoConfirmarClave = crearCampoClave(2);
            ventanaDeRegistro.add(campoConfirmarClave);

            JLabel etiquetaNombre = crearEtiqueta("Nombre:", 3);
            ventanaDeRegistro.add(etiquetaNombre);
            campoNombre = crearCampo(3);
            ventanaDeRegistro.add(campoNombre);

            JLabel etiquetaMail = crearEtiqueta("mail:", 4);
            ventanaDeRegistro.add(etiquetaMail);
            campoMail = crearCampo(4);
            ventanaDeRegistro.add(campoMail);

            ventanaDeRegistro.add(botonDeConectar());
            ventanaDeRegistro.add(botonDeSalir());
        }

        ventanaDeRegistro.setVisible(true);

    }

    private JButton botonDeConectar() {
        JButton conectar = new JButton("Registrar");
        conectar.setBounds(170, 160, 100, 30);
        ventanaDeRegistro.getRootPane().setDefaultButton(conectar);
        conectar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                ChatNewUser newUser = new ChatNewUser();
                List<String> parameters = newUser.generateParameters(campoUsuario.getText(),
                        campoClave.getText(), campoConfirmarClave.getText(),
                        campoNombre.getText(), campoMail.getText());

                newUser.doAction(parameters);
            }
        });

        return conectar;
    }

    private JButton botonDeSalir() {
        JButton salir = new JButton("Salir");
        salir.setBounds(60, 160, 100, 30);
        salir.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        ventanaDeRegistro.setVisible(false);
                    }
                });
            }
        });

        return salir;
    }

    private boolean laVentanaNoExiste() {
        return ventanaDeRegistro == null;
    }

    private void parametrosDeVentana() throws HeadlessException {
        ventanaDeRegistro.setTitle("Iniciar sesión");
        ventanaDeRegistro.setSize(340, 230);
        ventanaDeRegistro.setResizable(false);

        Toolkit toolkit = ventanaDeRegistro.getToolkit();
        Dimension size = toolkit.getScreenSize();
        ventanaDeRegistro.setLocation((size.width - ventanaDeRegistro.getWidth()) / 2,
                (size.height - ventanaDeRegistro.getHeight()) / 2);
        ventanaDeRegistro.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ventanaDeRegistro.setLayout(null);
    }

    private JLabel crearEtiqueta(String nombre, int posicion) {
        JLabel etiqueta = new JLabel(nombre);
        etiqueta.setBounds(20, 10 + 30 * posicion, 130, 30);
        etiqueta.setHorizontalAlignment(JLabel.RIGHT);
        return etiqueta;
    }

    private JTextField crearCampo(int posicion) {
        JTextField campo = new JTextField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }

    private JPasswordField crearCampoClave(int posicion) {
        JPasswordField campo = new JPasswordField();
        campo.setBounds(170, 10 + 30 * posicion, 150, 30);
        return campo;
    }

    public static void login() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ventanaDeRegistro.setVisible(false);
            }
        });
        ChatLogin login = new ChatLogin();
        List<String> loginParameters = login.convertToParameters(
                campoUsuario.getText(), campoClave.getText());
        login.doAction(loginParameters);
    }
}
